// 1.导入axios模块
import axios from 'axios'
//导入token工具包
import { saveToken, removeToken, getToken } from './token.js'
// 导入Toast
import { Toast } from 'vant'
//导入router
import router from '@/router/index.js'
// 2.创建axios自定义实例
const instance = axios.create({
    // 设置基地址
    baseURL: 'http://toutiao-app.itheima.net/',
    // 设置网络超时
    timeout: 10000
})


// 添加请求拦截器，自动上传token
instance.interceptors.request.use(
    function (config) {
        //如果用户有登录，就自动添加token
        if (getToken()) {
            config.headers.Authorization = 'Bearer ' + getToken().token
        }
        return config
    },
    function (error) {
        // 对请求错误做些什么
        return Promise.reject(error)
    }
)
// 添加响应拦截器，拦截token过期的401错误
instance.interceptors.response.use(
    function (response) {
        // 在发送请求之前做些什么
        // console.log(response)
        return response
    },
    async function (error) {
        // 对请求错误做些什么
        if (error.response.status === 401) {
            // 是401,判断用户没有token
            if (getToken()) {
                // 有token,说明token过期,需要请求刷新token
                /* 使用try-catch捕捉异常*/
                try {
                    // 刷新token
                    const tokenRes = await axios({
                        url: 'http://toutiao-app.itheima.net/v1_0/authorizations',
                        method: 'put',
                        headers: {
                            // 调用方法 获取返回的对象 然后 点出 token
                            Authorization: `Bearer ${getToken().refresh_token}`
                        }
                    })
                    // 成功:更新token,返回当前页
                    console.log('更新token:' + tokenRes)
                    let newToken = getToken()
                    newToken.token = tokenRes.data.dat.token
                    saveToken(newToken)
                    // 返回当前配置信息
                    return instance(error.config)
                }
                catch (err) {
                    // 失败：说明refresh过期，需要重新登录
                    //弹窗提示
                    Toast.fail('请重新登录')
                    // 移除token
                    removeToken()
                    // 跳转登录页
                    router.push('/login')

                }

            } else {
                // 没有token，说明用户未登录，需要重新登录
                //弹窗提示
                Toast.fail('请重新登录')
                // 跳转登录页
                router.push('/login')
            }

        } else {
            //不是401，说明是其他问题，例如404路径错误，这个不做处理
        }
        // 如果觉得token过期控制台爆红看着不舒服，就可以手动清除控制台打印
        setTimeout(() => {
            console.clear()
        }, 2000)
        return Promise.reject(error);
    })
/* */
// 3.到处模块
export default instance